import $api from './requests.js'
import config from './config.js';
import $validateCYH from './validateCYH.js';
var utils = {
	//---------------------登录注册方法-------------
	/**发送验证码
	 * @param {Object} 发送验证码所需参数
	 * @param {Object} _this 当前页面的this
	 * 使用:vue页面data中定义
		countDown:60,
		codeStatus:0,
    timeTimer:null,
    loadingTimer:null
	 */
	sendCode:function(param, _this){
		let countDown = _this.data.countDown;
		let timeTimer = _this.data.timeTimer;
		let codeStatus = _this.data.codeStatus;
		let loadingTimer = _this.data.loadingTimer;
		let initCountDown = countDown;
		//校验手机号
		if (!$validateCYH.mobile(param.mobile))return; 
		if (!codeStatus) {
			//loading提示框
			clearTimeout(_this.data.loadingTimer);
			_this.setData({loadingTimer : this.showLoading('发送中')});
			//发送验证码
			$api.getCode(param).then(res => {
				!codeStatus ? _this.setData({codeStatus : 1}): ''; //改变状态
				this.showToast('验证码已发送,请注意查收');
				clearTimeout(_this.data.loadingTimer);//清除发送中...提示框timer
				clearInterval(_this.data.timeTimer); 
				// 验证码倒计时
				_this.setData({timeTimer:setInterval(()=>{
					_this.setData({countDown:--_this.data.countDown})
					if (_this.data.countDown <= 0) {
						_this.setData({codeStatus : 0});
						_this.setData({countDown : initCountDown});
						clearInterval(_this.data.timeTimer); 
					}
				},1000)})
			}).catch(()=>{
				clearTimeout(loadingTimer);//清除发送中...提示框timer
			})
		} else {
			this.showToast('验证码已发送,请注意查收');
		}
	},
	/**是否登录
	 * 本地缓存是否有存有用户信息
	 */
	isLogin :function(isGoLogin = false){
		if (!wx.getStorageSync('token')) {
			return false;
		}
		return true;
	},
	/**跳转登录
	 * @param {Object} isRedirect 是否需要重定向
	 */
	goLogin :function(isRedirect){
		wx.removeStorageSync('userInfo');
		this.showToast('请前往登录',()=>{
			if(isRedirect=="isRedirect"){
				wx.redirectTo({
					url: config['LOGIN_URL']
				});
			}else{
				wx.navigateTo({
					url:config['LOGIN_URL']
				})
			}
		})
	},
	getUser:function(callback,isGoLogin = true){
		if(this.isLogin(isGoLogin)){
			var userInfo = wx.getStorageSync('userInfo');
			$api.getUser(userInfo).then(res=>{
				wx.setStorageSync('user',res.data);
				callback(res.data);
			})
		}
	},
	//-----------------工具方法-------------
	/**获取图片Base64
	 * @param {Object} url chooseImg接口获取到的url
	 * @param {Object} callback 回调接收base64
	 */
	getBase64Image :function(url, callback){
		wx.getFileSystemManager().readFile({
			filePath: url, // 选择图片返回的相对路径
			encoding: 'base64', // 编码格式
			success: res => { // 成功的回调
				callback('data:image/png;base64,' + res.data)
			}
		})
	},
	/**转换时间戳
	 * @param {Object} time 时间戳传入
	 */
	turnTime :function(time){
		if (time == undefined || typeof time != 'number') {
			return time;
		}
		var t = parseInt(time) ;
		var dateTime = new Date(t);
		var y = dateTime.getFullYear();
		var m = (dateTime.getMonth() + 1) < 10 ? '0' + (dateTime.getMonth() + 1) : dateTime.getMonth() + 1;
		var d = dateTime.getDate() < 10 ? '0' + dateTime.getDate() : dateTime.getDate();
		var h = dateTime.getHours() < 10 ? '0' + dateTime.getHours() : dateTime.getHours();
		var mi = dateTime.getMinutes() < 10 ? '0' + dateTime.getMinutes() : dateTime.getMinutes();
		var s = dateTime.getSeconds() < 10 ? '0' + dateTime.getSeconds() : dateTime.getSeconds();
		var turnTime = `${y}-${m}-${d} ${h}:${mi}:${s}`;
		return turnTime;
	},
	/**
	 * @param {Object} time 倒计时
	 */
	turnCountDown :function(time){
		if (time == undefined || typeof time != 'number') {
			return;
		}
		var t = time;
		var D = Math.floor(t / 86400);
			t -= 86400 * D;
		var H = Math.floor(t / 3600) < 10 ? '0' + Math.floor(t / 3600):Math.floor(t / 3600);
			t -= 3600 * H;
		var M = Math.floor(t / 60) < 10 ? '0' + Math.floor(t / 60):Math.floor(t / 60);
			t -= 60 * M;
		var S = Math.round(t) < 10 ? '0'+ Math.round(t) :Math.round(t);
		var turnCoutdwonTime = `${H}:${M}:${S}`;
		return turnCoutdwonTime;
	},
	/**计算距离
	 * @param {Object} lat1 当前纬度
	 * @param {Object} lng1 当前经度
	 * @param {Object} lat2 距离纬度
	 * @param {Object} lng2 距离经度
	 */
	distance(la1, lo1, la2, lo2) {
		var La1 = la1 * Math.PI / 180.0;
		var La2 = la2 * Math.PI / 180.0;
		var La3 = La1 - La2;
		var Lb3 = lo1 * Math.PI / 180.0 - lo2 * Math.PI / 180.0;
		var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(La3 / 2), 2) + Math.cos(La1) * Math.cos(La2) * Math.pow(Math.sin(
			Lb3 / 2), 2)));
		s = s * 6378.137;
		s = Math.round(s * 10000) / 10000;
		s = Math.round(s);
		return s;
	},
	
	//---------------------------交互方法------------------------------	
	 /**显示loading
	  * @param {Object} title 显示加载文字
	  * @param {Object} duration 持续时间
	  */
	 showLoading :function(title,mask,duration){
	 	let timer = null;
	 	wx.showLoading({
	 		title:title,
	 		mask:mask || true
	 	})
	 	clearTimeout(timer);
	 	timer = setTimeout(()=>{
	 		wx.hideLoading();
	 		this.showToast('加载超时');
	 	},duration || config['LOADING_TIME'])
	 	return timer;
	 },
	 /**提示弹窗
	  * @param {Object} title 提示文字内容
	  * @param {Object} callback 提示完后的回调
	  * @param {Object} mask 是否显示蒙版
	  */
	 showToast :function(title, callback,mask){
	 	wx.showToast({
	 		title: title,
	 		icon: "none",
	 		position: "bottom",
	 		mask: mask ||false,
	 		success() {
	 			if (typeof callback == "function") {
	 				setTimeout(function() {
	 					callback();
	 				}, 1500)
	 			}
	 		}
	 	})
	 },
	 /**确认弹窗
	  * @param {Object} content 内容
	  * @param {Object} showCancle 是否取消
	  * @param {Object} title 标题
	  * @param {Object} callback 点击确认后执行方法
	  * @param {Object} mask 蒙版
	  */
	 showModal:function(content,showCancle,title,callback,mask){
		 wx.showModal({
		 	title:title || '提示',
			content:content,
			mask:mask || false,
			showCancel:showCancle || true,
			success(res) {
				if(res.confirm){
					callback();
				}
			}
		 })
	 }
	 
}

module.exports = utils;
